package common.model.Entity.bankEntity;

import common.model.Entity.BaseEntity;
import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 表示银行交易记录的实体类，继承自 {@link BaseEntity}。
 * <p>
 * 包含交易 ID、用户 ID、账户 ID、金额、交易类型、描述、状态以及创建时间等信息。
 * </p>
 */
@Getter
@Setter
public class Transaction extends BaseEntity {
    /**
     * 交易记录唯一标识符
     */
    private Long id;

    /**
     * 发起交易的用户 ID
     */
    private Long userId;

    /**
     * 所属账户 ID
     */
    private Long accountId;

    /**
     * 交易金额
     */
    private BigDecimal amount;

    /**
     * 交易类型：0 表示存款，1 表示消费
     */
    private Integer transactionType;

    /**
     * 交易描述信息（例如用途说明）
     */
    private String description;

    /**
     * 交易状态，1 表示成功，0 表示失败或未完成
     */
    private Integer status;

    /**
     * 交易创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 默认构造方法
     */
    public Transaction() {
    }

    /**
     * 全参数构造方法
     *
     * @param id             交易 ID
     * @param userId         用户 ID
     * @param accountId      账户 ID
     * @param amount         交易金额
     * @param transactionType 交易类型（0: 存款, 1: 消费）
     * @param description    交易描述
     * @param status         交易状态
     * @param createdAt      创建时间
     */
    public Transaction(Long id, Long userId, Long accountId, BigDecimal amount, Integer transactionType,
                       String description, Integer status, LocalDateTime createdAt) {
        this.id = id;
        this.userId = userId;
        this.accountId = accountId;
        this.amount = amount;
        this.transactionType = transactionType;
        this.description = description;
        this.status = status;
        this.createdAt = createdAt;
    }
}
